home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / mach-o / ldsyms.h < prev    next >
Text File  |  1994-08-22  |  4KB  |  88 lines

  1.  
  2. #ifndef _MACHO_LDSYMS_H_
  3. #define _MACHO_LDSYMS_H_
  4.  
  5. #import <mach-o/loader.h>
  6.  
  7. /*
  8.  * This file describes the link editor defined symbols.  The semantics of a
  9.  * link editor symbol is that it is defined by the link editor only if it is
  10.  * referenced and it is an error for the user to define them (see the man page
  11.  * ld(1)).  The standard UNIX link editor symbols: __end, __etext and __edata
  12.  * are not not supported by the NeXT Mach-O link editor.  These symbols are
  13.  * really not meaningful in a Mach-O object file and the link editor symbols
  14.  * that are supported (described here) replace them.  In the case of the
  15.  * standard UNIX link editor symbols the program can use the symbol
  16.  * __mh_execute_header and walk the load commands of it's program to determine
  17.  * the ending (or beginning) of any section or segment in the program.  Note
  18.  * that the compiler prepends an underbar to all external symbol names coded
  19.  * in a high level language.  Thus in 'C' names are coded without an underbar
  20.  * and symbol names in the symbol table have an underbar.  There are two cpp
  21.  * macros for each link editor defined name in this file.  The macro with a
  22.  * leading underbar is the symbol name and the one without is the name as
  23.  * coded in 'C'.
  24.  */
  25.  
  26. /*
  27.  * The value of the link editor defined symbol _MH_EXECUTE_SYM is the address
  28.  * of the mach header in a Mach-O executable file type.  It does not appear in
  29.  * any file type other than a MH_EXECUTE file type.  The type of the symbol is
  30.  * absolute as the header is not part of any section.
  31.  */
  32. #define _MH_EXECUTE_SYM    "__mh_execute_header"
  33. #define MH_EXECUTE_SYM    "_mh_execute_header"
  34. extern const struct mach_header _mh_execute_header;
  35.  
  36. /*
  37.  * The value of the link editor defined symbol _MH_BUNDLE_SYM is the address
  38.  * of the mach header in a Mach-O bundle file type.  It does not appear in
  39.  * any file type other than a MH_BUNDLE file type.  The type of the symbol is
  40.  * an N_SECT symbol even thought the header is not part of any section.  This
  41.  * symbol is private to the code in the bundle it is a part of.
  42.  */
  43. #define _MH_BUNDLE_SYM    "__mh_bundle_header"
  44. #define MH_BUNDLE_SYM    "_mh_bundle_header"
  45. extern const struct mach_header _mh_bundle_header;
  46.  
  47. /*
  48.  * The value of the link editor defined symbol _MH_DYLIB_SYM is the address
  49.  * of the mach header in a Mach-O dylib file type.  It does not appear in
  50.  * any file type other than a MH_DYLIB file type.  The type of the symbol is
  51.  * an N_SECT symbol even thought the header is not part of any section.  This
  52.  * symbol is private to the code in the library it is a part of.
  53.  */
  54. #define _MH_DYLIB_SYM    "__mh_dylib_header"
  55. #define MH_DYLIB_SYM    "_mh_dylib_header"
  56. extern const struct mach_header _mh_dylib_header;
  57.  
  58. /*
  59.  * The value of the link editor defined symbol _MH_DYLINKER_SYM is the address
  60.  * of the mach header in a Mach-O dylinker file type.  It does not appear in
  61.  * any file type other than a MH_DYLINKER file type.  The type of the symbol is
  62.  * an N_SECT symbol even thought the header is not part of any section.  This
  63.  * symbol is private to the code in the dynamic linker it is a part of.
  64.  */
  65. #define _MH_DYLINKER_SYM    "__mh_dylinker_header"
  66. #define MH_DYLINKER_SYM        "_mh_dylinker_header"
  67. extern const struct mach_header _mh_dylinker_header;
  68.  
  69. /*
  70.  * For the MH_PRELOAD file type the headers are not loaded as part of any
  71.  * segment so the link editor defines symbols defined for the beginning
  72.  * and ending of each segment and each section in each segment.  The names for
  73.  * the symbols for a segment's beginning and end will have the form:
  74.  * __SEGNAME__begin and  __SEGNAME__end where __SEGNAME is the name of the
  75.  * segment.  The names for the symbols for a section's beginning and end will
  76.  * have the form: __SEGNAME__sectname__begin and __SEGNAME__sectname__end
  77.  * where __sectname is the name of the section and __SEGNAME is the segment it
  78.  * is in.
  79.  * 
  80.  * The above symbols' types are those of the section they are referring to.
  81.  * This is true even for symbols who's values are end's of a section and
  82.  * that value is next address after that section and not really in that
  83.  * section.  This results in these symbols having types referring to sections
  84.  * who's values are not in that section.
  85.  */
  86.  
  87. #endif /* _MACHO_LDSYMS_H_ */
  88.